/**
 * 单例设计模式singleton pattern是一种设计思想
 * 表现形式引用数据类型 对象的诞生原因
 * 把描述同一件事务的属性和特征进行分组归类，存储在同一个堆内存中{}，避免全局变量之间的冲突和污染。
 * 在单例设计模式中，obj不仅仅是对象名，也被称为命名空间NameSpace.把描述事务的属性存放在命名空间中，多个命名空间互不影响。
 * 每一个命名空间都是js中Object基类的实例，实例之间相互独立互不影响，所以称为单独实例，单例
 * 高级单例模式 面试
 * 给命名空间赋值不是直接赋值给一个对象
 * 先匿名函数自执行，形成一个私有作用域A（不销毁的栈内存，因为里面有return），里面return一个堆内存地址赋值给命名空间
 * 好处：可以在私有作用域中创造很多内容（变量或函数），我们暴露到返回的对象中
 * 基于单例模式实现模块化开发
 * 
 *  */


var obj = {
    name: 'zs',
    age: 12,
    sex: 'female',
}
var obj2 = {
    name: 'li',
    age: 20,
    sex: 'male',
}
console.log(obj.name, obj2.name)

// 高级单例模式 nameSpace的值是自执行函数放回值赋值给nameSpace，形成一个不销毁的私有栈内存。
var nameSpace = (function () {
    var n = 10
    function fn() {
       
    }
    return {
        fn:fn
    }
})()

function Person(){

}
var xiaoming=new Person()